package mornd.test1;

import mornd.test1.comps.Bean1;
import org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor;
import org.springframework.context.annotation.CommonAnnotationBeanPostProcessor;
import org.springframework.context.support.GenericApplicationContext;

/**
 * @author: mornd
 * @dateTime: 2023/5/5 - 14:51
 */
public class App {
    public static void main(String[] args) {
        GenericApplicationContext context = new GenericApplicationContext();
        context.registerBean("bean1", Bean1.class);
        //context.registerBean("bean2", Bean2.class);

        // 注入解析 @Autowired,@VAlue 等注解的后置处理器
        context.registerBean(AutowiredAnnotationBeanPostProcessor.class);
        // 注入解析 @Resource,@PostConstruct 等注解的后置处理器
        context.registerBean(CommonAnnotationBeanPostProcessor.class);

        /**
         * refresh() 作用：
         * 1、执行所有的 BeanFactory 后置处理器（BeanFactoryPostProcessor）
         * 2、注册 Bean 后置处理器（BeanPostProcessor ==> AutowiredAnnotationBeanPostProcessor）
         * 3、创建和初始化单例
         * 4、依赖注入扩展（@Autowired，@Value）
         * 5、初始化扩展（@PostConstruct）
         * 6、回调 Aware 和 InitializingBean
         * 7、创建成功
         */
        context.refresh();

        for (String name : context.getBeanDefinitionNames()) {
            System.out.println(name);
        }

        context.close();
    }
}
